<?php
namespace app\admin\validate;

use think\Db;
/**
 * 文章分类验证
 */
class Category extends Main
{
    protected $rule = [
        'id' =>'require|checkId|checkSite',
        'category_type' => 'require|in:1,2|checkPid|checkSite',
        'title' => 'require',
    ];

    protected $message = [
        'category_type.require' => '请选择分类类型',
        'category_type.in' => '分类类型只能为文章或单页',
        'title.require' => '请填写分类名',
        'id.require' => '请选择分类',
        'id.number' => '分类id只能为数字',
    ];

    protected $scene = [
        'add' =>  ['category_type', 'title'],
        'edit' => ['category_type', 'title'],
        'del' => ['id']
    ];

    // 编辑/删除时非管理员不能处理自己站点以外的分类
    protected function checkSite($value, $rule, $data)
    {
        if(checkPermission() !== 'system' && ($data['id']??0)){
            $cate = Db::name('category')->where('id', $data['id'])->where('site_id', Db::name('site')->where('host', str_replace('admin.', '', $_SERVER['HTTP_HOST']) ?? '')->value('id'))->find();
            if(!$cate){
                return '非法操作';
            }
        }
        return true;
    }

    protected function checkId($value, $rule, $data)
    {
        // 是否关联了文章
        $articleCount = Db::name('article')->where('category_id', 'in', $value)->count();
        if($articleCount > 0){
            return '该分类下有文章，请先删除文章再删除分类';
        }
        return true;
    }

    protected function checkPid($value, $rule, $data)
    {
        if(!($data['pid']??false)){
            if(!($data['site_id']??false)){
                return '父分类必须选择站点';
            }
            if(!($data['language_id']??false)){
                return '父分类必须选择语言';
            }
        }
        return true;
    }
}